/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package src;

import ClasesAModificar.AcontecimientoModificar;
import ClasesAModificar.ColectivoModificar;
import ClasesAModificar.DocumentoModificar;
import ClasesAModificar.PersonajeMoficar;
import IO.EscribeFichero;
import IO.LeeFichero;
import java.sql.*;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.JOptionPane;

/**
 *
 * @author Nuevo Mini F
 */
public class Core {
    
    //ID del documento donde trabajamos
    private static int documento;
    
    //Nombre de BD
    public static String nombreBD ="";    
    
    public static int DOCUMENTO(){return getDocumento();}
    
    private static Connection conexion;
    private static Statement st;
    
    public static void CrearBaseDatos()
    {
        // Se utiliza un try para capturar los posibles errores de MySQL
        try {
            nombreBD = "BD";
            String nombre = "BD";
            // Se registra el Driver de MySQL
            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
            /*Se crea una conexión a la base de datos indicando la dirección de la base de datos, el usuario y el
            password*/
            try (Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "")) {
//Se crea un objeto de la clase Statement para poder enviar comandos SQL a la base de datos
                Statement st = conexion.createStatement();
// Se crea una base de datos 
                //st.executeUpdate("DROP DATABASE IF EXISTS "+nombre);
                String[] crearTablas = IO.LeeFichero.leer("src\\Scripts\\ScriptCreacionTablas.sql");
                st.executeUpdate("CREATE DATABASE IF NOT EXISTS "+nombre);
                
//Se cierra el statement
                st.close();
// Seleccionamos la base de datos creada
                conexion.setCatalog(nombre);
//Se abre un nuevo statement para enviar commandos SQL a la nueva base de datos
                st = conexion.createStatement();
// Creacion de tablas
                int i = 1;
                while(!crearTablas[i].equals("")){
                    st.executeUpdate(crearTablas[i]);
                    i = i+2;
                }
                
                IDs.inicializaIDs();
                
                st.close();
                conexion.close();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null,"Fallo en crear la conexion: "+e.toString());
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Fallo en CrearBD: "+e.toString());
        }
    }
    
    public static int CrearDocumento(String titulo, String desc, int fichero, int catalogacion)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            //-1 quiere decir error 
            setDocumento(-1);
            
            String descripcion = "INSERT INTO `descripcion` (`IDDescripcion`, `Titulo`, `DescripcionContenido`) VALUES";
            descripcion += "("+IDs.getDescripcion()+", '"+titulo+"', '"+desc+"');";
            int idDescripcion = IDs.getDescripcion();
            IDs.incrementaDescripcion();
            st.executeUpdate(descripcion);

            String  rdescripcioncatalogacion = "INSERT INTO `rdescripcioncatalogacion` (`IDDescripcion`, `IDCatalogacion`) VALUES";
            rdescripcioncatalogacion += "("+idDescripcion+", "+catalogacion+");";
            st.executeUpdate(rdescripcioncatalogacion);
                    
            String rdescripcionficheros ="INSERT INTO `rdescripcionficheros` (`IDDescripcion`, `IDFichero`) VALUES";
            rdescripcionficheros+= "("+idDescripcion+", "+fichero+");";
            st.executeUpdate(rdescripcionficheros);
                    
            String Documento = "INSERT INTO `documento` (`IDDocumento`, `IDDescripcion`) VALUES";
            Documento += "("+IDs.getDocumento()+", "+idDescripcion+");";
            setDocumento(IDs.getDocumento());
            IDs.incrementaDocumento();

            st.executeUpdate(Documento);  
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en CrearDocumento: "+e.toString());
        }
        return getDocumento();
    }
    
    public static int CrearAcontecimiento(String nombre, String desc, String fechaIni, String fechaFin)
    {
        int idAcontecimiento = -1;
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            String descripcion = "INSERT INTO `descripcion` (`IDDescripcion`, `Titulo`, `DescripcionContenido`) VALUES";
            descripcion += "("+IDs.getDescripcion()+", '"+nombre+"', '"+desc+"');";
            int idDescripcion = IDs.getDescripcion();
            IDs.incrementaDescripcion();
            st.executeUpdate(descripcion);
            
            idAcontecimiento = IDs.getAcontecimiento();
            IDs.incrementaAcontecimiento();
            String acontecimiento = "INSERT INTO `acontecimiento` (`IDAcontecimiento`, `Nombre`, `IDDescripcion`, `FechaComienzo`, `FechaFinalizacion`) VALUES";
            acontecimiento += "("+idAcontecimiento+", '"+nombre+"', "+idDescripcion+", '"+fechaIni+"', '"+fechaFin+"');";
            st.executeUpdate(acontecimiento);

            Iterator i = LinkedLists.getFicherosParaAcontecimientos().iterator();
            while (i.hasNext())
            {
                int idFi = (int)i.next();
                String racontecimientofichero = "INSERT INTO `racontecimientofichero` (`IDAcontecimiento`, `IDFichero`) VALUES";
                racontecimientofichero += "("+idAcontecimiento+", "+idFi+");";
                st.executeUpdate(racontecimientofichero);
            }
            LinkedLists.setFicherosParaAcontecimientos(new LinkedList<Integer>());
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en CrearAcontecimiento: "+e.toString());
        }
        return idAcontecimiento;
    }
    
    public static int CrearCargo(String nombre, String desc)
    {
        int idCargo = -1;
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            String descripcion = "INSERT INTO `descripcion` (`IDDescripcion`, `Titulo`, `DescripcionContenido`) VALUES";
            descripcion += "("+IDs.getDescripcion()+", '"+nombre+"', '"+desc+"');";
            int idDescripcion = IDs.getDescripcion();
            IDs.incrementaDescripcion();
            st.executeUpdate(descripcion);
            
            idCargo = IDs.getCargo();
            IDs.incrementaCargo();
            String cargo = "INSERT INTO `cargo` (`IDCargo`, `Nombre`, `IDDesripcion`) VALUES";
            cargo += "("+idCargo+", '"+nombre+"', "+idDescripcion+");";
            st.executeUpdate(cargo);
            
            Iterator i = LinkedLists.getFicherosParaCargos().iterator();
            while (i.hasNext())
            {
                int idFi = (int)i.next();
                String rcargoficheros = "INSERT INTO `rcargoficheros` (`IDCargo`, `IDFichero`) VALUES";
                rcargoficheros += "("+idCargo+", "+idFi+");";
                st.executeUpdate(rcargoficheros);
            }    
            LinkedLists.setFicherosParaCargos(new LinkedList<Integer>());
            conexion.close();
            st.close();
            
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en CrearCargo: "+e.toString());
        }
        return idCargo;
        
    }
    
    public static int CrearColectivo(String nombre, String desc)
    {
        int idColectivo = -1;
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            String descripcion = "INSERT INTO `descripcion` (`IDDescripcion`, `Titulo`, `DescripcionContenido`) VALUES";
            descripcion += "("+IDs.getDescripcion()+", '"+nombre+"', '"+desc+"');";
            int idDescripcion = IDs.getDescripcion();
            IDs.incrementaDescripcion();
            st.executeUpdate(descripcion);
            
            idColectivo = IDs.getColectivo();
            IDs.incrementaColectivo();
            String colectivo = "INSERT INTO `colectivo` (`IDColectivo`, `Nombre`, `IDDescripcion`) VALUES";
            colectivo += "("+idColectivo+", '"+nombre+"', "+idDescripcion+");";
            st.executeUpdate(colectivo);
            
            Iterator i = LinkedLists.getFicherosParaColectivos().iterator();
            while (i.hasNext())
            {
                int idFi = (int)i.next();
                String rcolectivofichero = "INSERT INTO `rcolectivofichero` (`IDColectivo`, `IDFichero`) VALUES";
                rcolectivofichero += "("+idColectivo+", "+idFi+");";
                st.executeUpdate(rcolectivofichero);
            }    
            LinkedLists.setFicherosParaColectivos(new LinkedList<Integer>());
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en CrearColectivo: "+e.toString());
        }
        return idColectivo;
    }
    
    public static int CrearFichero(String nombre, String uRI, String formato)
    {
        int idFichero = -1;
        try {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            idFichero = IDs.getFichero();
            IDs.incrementaFichero();
            String fichero = "INSERT INTO `fichero` (`IDFichero`, `Nombre`, `Formato`, `URI`) VALUES";
            fichero += "("+idFichero+", '"+nombre+"', '"+formato+"', '"+uRI+"');";
            st.executeUpdate(fichero);
            st.close();
            conexion.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en CrearFichero: "+e.toString());
        }
        return idFichero;
    }
    
    public static int CrearCatalogacion(String nombre, String uRI, String formato, String tipo, String fuente)
    {
        int idCatalogacion = -1;
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            idCatalogacion = IDs.getCatalogacion();
            IDs.incrementaCatalogacion();
            String catalogacion = "INSERT INTO `gatalogacion` (`IDCatalogacion`, `Tipo`, `Fuente`, `FormatoArchivo`, `URI`, `Nombre`) VALUES";
            catalogacion += "("+idCatalogacion+", '"+tipo+"', '"+fuente+"', '"+formato+"', '"+uRI+"', '"+nombre+"');";
            st.executeUpdate(catalogacion);
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en CrearCatalogacion: "+e.toString());
        }
        return idCatalogacion;
    }
    
    public static int CrearPersonaje(String nombreApellidos, String fechaN, String LugarN, 
                                    String fechaD, String lugarD, String biografia)
    {
        int idPersonaje = -1;
        try
        {   
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            idPersonaje = IDs.getPersonaje();
            IDs.incrementaPersonaje();
            String personaje = "INSERT INTO `personaje` (`NombreYApellidos`, `FechaNacimiento`, `LugarNacimiento`, `FechaDefuncion`, `LugarDefuncion`, `Biografia`, `IDPersonaje`) VALUES";
            personaje += "('"+nombreApellidos+"', '"+fechaN+"', '"+LugarN+"', '"+fechaD+"', '"+lugarD+"', '"+biografia+"', "+idPersonaje+");";
            st.executeUpdate(personaje);
            
            Iterator i = LinkedLists.getAliasParaPersonajes().iterator();
            while (i.hasNext())
            {
                String alias = (String)i.next();
                String rpersonajealias = "INSERT INTO `rpersonajealias` (`IDPersonaje`, `Alias`) VALUES";
                rpersonajealias += "("+idPersonaje+", '"+alias+"');";
                st.executeUpdate(rpersonajealias);
            } 
            
            LinkedLists.setAliasParaPersonajes(new LinkedList<String>());
                    
            Iterator iter = LinkedLists.getCargosParaPersonajes().iterator();
            while (iter.hasNext())
            {
                ClaseCargo cargo = (ClaseCargo)iter.next();
                String rpersonajecargos = "INSERT INTO `rpersonajecargos` (`IDPersonaje`, `IDCargo`, `FechaComienzo`, `FechaFinal`) VALUES";
                rpersonajecargos += "("+idPersonaje+", "+cargo.getIdCargo()+", '"+cargo.gettInicio()+"', '"+cargo.gettFin()+"');";
                st.executeUpdate(rpersonajecargos);
            } 
            LinkedLists.setCargosParaPersonajes(new LinkedList<ClaseCargo>());
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en CrearPersonaje: "+e.toString());
        }
        return idPersonaje;
    }
    
    public static String dameTodosColectivos()
    {
        String resultado ="";
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String busqueda =   "SELECT C.IDColectivo, C.Nombre "+
                                "FROM colectivo C";
            ResultSet rs = st.executeQuery(busqueda);

            while(rs.next())
            {
                resultado += rs.getString("C.IDColectivo")+": ";
                resultado += rs.getString("C.Nombre") +"\n";  
            }   
            rs.close();
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en dameTodosColectivo: "+e.toString());
        }
        return resultado;
    }
    
    public static String dameTodosAcontecimientos()
    {            
        String resultado ="";
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String busqueda =   "SELECT A.IDAcontecimiento, A.Nombre "+
                                "FROM acontecimiento A";
            ResultSet rs = st.executeQuery(busqueda);

            while(rs.next())
            {
                resultado += rs.getString("A.IDAcontecimiento")+": ";
                resultado += rs.getString("A.Nombre") +"\n";  
            }   
            rs.close();
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en dameTodosAcontecimientos: "+e.toString());
        }
        return resultado;
    }
    
    public static String dameTodosCargos()
    {
        String resultado ="";
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String busqueda =   "SELECT C.IDCargo, C.Nombre "+
                                "FROM cargo C";
            ResultSet rs = st.executeQuery(busqueda);

            while(rs.next())
            {
                resultado += rs.getString("C.IDCargo")+": ";
                resultado += rs.getString("C.Nombre") +"\n";  
            }   
            rs.close();
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en dameTodosCargos: "+e.toString());
        }
        return resultado;
    }
    
    public static String dameTodosPersonajes()
    {
        String resultado ="";
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String busqueda =   "SELECT P.IDPersonaje, P.NombreYApellidos "+
                                "FROM personaje P";
            ResultSet rs = st.executeQuery(busqueda);

            while(rs.next())
            {
                resultado += rs.getString("P.IDPersonaje")+": ";
                resultado += rs.getString("P.NombreYApellidos") +"\n";  
            }   
            rs.close();
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en dameTodosPersonajes: "+e.toString());
        }
        return resultado;
    }
    
    public static String dameTodosFicheros()
    {
        String resultado ="";
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String busqueda =   "SELECT F.IDFichero, F.Nombre "+
                                "FROM fichero F";
            ResultSet rs = st.executeQuery(busqueda);

            while(rs.next())
            {
                resultado += rs.getString("F.IDFichero")+": ";
                resultado += rs.getString("F.Nombre") +"\n";  
            }   
            rs.close();
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en dameTodosFicheros: "+e.toString());
        }
        return resultado;
    }
    
    public static String dameTodosDocumentos()
    {
        String resultado ="";
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String busqueda =   "SELECT Doc.IDDocumento, Des.Titulo "+
                                "FROM descripcion Des, documento Doc "+
                                "WHERE Doc.IDDescripcion = Des.IDDescripcion";
            ResultSet rs = st.executeQuery(busqueda);

            while(rs.next())
            {
                resultado += rs.getString("Doc.IDDocumento")+": ";
                resultado += rs.getString("Des.Titulo") +"\n";  
            }   
            rs.close();
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null,"Fallo en dameTodosDocumentos: "+e.toString());
        }
        return resultado;
    }
    
    public static void linkaPersonajeConDocumento(int iddoc, int per)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String rdocumentopersonajes = "INSERT INTO `rdocumentopersonajes` (`IDDocumento`, `IDPersonaje`) VALUES";
            rdocumentopersonajes += "("+iddoc+", "+per+");";
            st.executeUpdate(rdocumentopersonajes);
            
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            System.out.printf("Fallo en linkaPersonajeConDocumento: "+e.toString());
        }
    }
    
    public static void linkaColectivoConDocumento(int iddoc,int col)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String rdocumentoacolectivo = "INSERT INTO `rdocumentoacolectivo` (`IDDocumento`, `IDColectivo`) VALUES";
            rdocumentoacolectivo += "("+iddoc+", "+col+");";
            st.executeUpdate(rdocumentoacolectivo);
            
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            System.out.printf("Fallo en linkaColectivoConDocumento: "+e.toString());
        }
    }
    
    public static void linkaAcontecimientoConDocumento(int iddoc,int aco)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String rdocumentoacontecimeinto = "INSERT INTO `rdocumentoacontecimeinto` (`IDDocumento`, `IDAcontecimiento`) VALUES";
            rdocumentoacontecimeinto += "("+iddoc+", "+aco+");";
            st.executeUpdate(rdocumentoacontecimeinto);
            
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            System.out.printf("Fallo en linkaAcontecimientoConDocumento: "+e.toString());
        }
    }
    
    public static void linkaAcontecimientoFichero(int padre, int hijo)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String racontecimientofichero = "INSERT INTO `racontecimientofichero` (`IDAcontecimiento`, `IDFichero`) VALUES";
            racontecimientofichero += "("+padre+", "+hijo+");";
            st.executeUpdate(racontecimientofichero);
            
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            System.out.printf("Fallo en linkaAcontecimientoFichero: "+e.toString());
        }
    }
    
    public static void linkaColectivoFichero(int padre, int hijo)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String rcolectivofichero = "INSERT INTO `rcolectivofichero` (`IDColectivo`, `IDFichero`) VALUES";
            rcolectivofichero += "("+padre+", "+hijo+");";
            st.executeUpdate(rcolectivofichero);
            
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            System.out.printf("Fallo en linkaColectivoFichero: "+e.toString());
        }
    }
    
    public static void linkaPersonajeAlias(int padre, String hijo)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String rpersonajealias = "INSERT INTO `rpersonajealias` (`IDPersonaje`, `Alias`) VALUES";
            rpersonajealias += "("+padre+", '"+hijo+"');";
            st.executeUpdate(rpersonajealias);
            
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            System.out.printf("Fallo en linkaPersonajeAlias: "+e.toString());
        }
    }
    public static String buscaEnLaBD(LinkedList<String> str)
    {
        String resultado ="Buscando en DOCUMENTO\nConcretamente en la Descripcion\nResultados: \n";
        String busqueda  ="";
        ResultSet rs;
        try{
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
    
            Iterator i = str.iterator();
            String doc="";
            while(i.hasNext())
            {
                String elem = (String)i.next();
                busqueda =  "SELECT * "+
                            "FROM descripcion Des, documento Doc "+
                            "WHERE Des.IDDescripcion = Doc.IDDescripcion AND (Des.Titulo='"+elem+"' OR Des.DescripcionContenido='"+elem+"');";
                rs = st.executeQuery(busqueda);
                while(rs.next())
                {                   
                    doc = rs.getString("Doc.IDDocumento")+": "+ rs.getString("Des.Titulo")+"\n";
                }   
                rs.close();
                        
            }
            resultado+=doc+"\nConcretamente en la gatalogacion\nResultados: \n";            
            
            String act="";

            Iterator j = str.iterator();
            while(j.hasNext())
            {
                String elem = (String)j.next();
                busqueda =  "SELECT * "+
                            "FROM gatalogacion g,rdescripcioncatalogacion rdc,documento d, descripcion de "+
                            "WHERE g.IDCatalogacion = rdc.IDCatalogacion AND de.IDDescripcion = rdc.IDDescripcion AND de.IDDescripcion = d.IDDescripcion AND(g.Nombre='"+elem+"' OR g.Tipo='"+elem+"' OR g.FormatoArchivo='"+elem+"' OR g.URI='"+elem+"' OR g.Fuente='"+elem+"');";
                
                rs = st.executeQuery(busqueda);
                while(rs.next())
                {
                act += rs.getString("d.IDDocumento")+": "+ rs.getString("g.Nombre")+"\n"; 
                }
                rs.close();
                        
            }

            resultado+=act+"\nConcretamente en la fichero\nResultados: \n";   
            
            String col="";

            Iterator t = str.iterator();
            while(t.hasNext())
            {
                String elem = (String)t.next();
                busqueda =  "SELECT * "+
                            "FROM fichero f, rdescripcionficheros rdf, documento d, descripcion de "+
                            "WHERE f.IDFichero = rdf.IDFichero AND rdf.IDDescripcion = de.IDDescripcion AND d.IDDescripcion = de.IDDescripcion AND (f.Nombre='"+elem+"' OR f.Formato='"+elem+"' OR f.URI='"+elem+"');";
                
                rs = st.executeQuery(busqueda);
                while(rs.next()){
                    col += rs.getString("d.IDDocumento")+": "+ rs.getString("f.Nombre")+"\n";
                }
                rs.close();
                
            }
            resultado+=col+"\nBuscando en Acontecimientos\nResultados: \n";
            String ac ="";
            Iterator x = str.iterator();
            while(x.hasNext())
            {
                String elem = (String)x.next();
                busqueda =  "SELECT * "+
                            "FROM acontecimiento "+
                            "WHERE Nombre='"+elem+"' OR FechaComienzo='"+elem+"' OR FechaFinalizacion='"+elem+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                        ac += rs.getString("IDAcontecimiento")+": "+ rs.getString("Nombre")+"\n";                    
            }
            resultado+=ac+"\nBuscando en Colectivos\n Resultados:\n ";
            String co ="";
            Iterator b = str.iterator();
            while(b.hasNext())
            {
                String elem = (String)b.next();
                busqueda =  "SELECT * "+
                            "FROM colectivo "+
                            "WHERE Nombre='"+elem+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    co += rs.getString("IDColectivo")+": "+ rs.getString("Nombre")+"\n";                    
            }
            
            resultado+=co+"\nBuscando en Personajes\n Resultados:\n";
            String pe ="";
            Iterator v = str.iterator();
            while(v.hasNext())
            {
                String elem = (String)v.next();
                busqueda =  "SELECT * "+
                            "FROM personaje "+
                            "WHERE NombreYApellidos='"+elem+"' OR FechaNacimiento='"+elem+"' OR LugarNacimiento='"+elem+"' OR FechaDefuncion='"+elem+"' OR LugarDefuncion='"+elem+"' OR Biografia='"+elem+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    pe += rs.getString("IDPersonaje")+": "+ rs.getString("NombreYApellidos")+"\n";                    
            }
            resultado+=pe;
        }catch(Exception e){System.out.printf("Fallo en buscaEnLaBD: "+ e.toString());}
        return resultado;
    }
    
    public static String buscaEnLaBDPorDocumento(DocumentoModificar DM)
    {
        String resultado ="Buscando en DOCUMENTO\nConcretamente en Descripcion\nResultados:\n";
        String busqueda  ="";
        ResultSet rs;
        try{
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
    
            String doc="";

                busqueda =  "SELECT * "+
                            "FROM descripcion Des, documento Doc "+
                            "WHERE Des.IDDescripcion = Doc.IDDescripcion AND (Des.Titulo='"+DM.getTituloDes()+"');";
                rs = st.executeQuery(busqueda);
                while(rs.next())
                {                   
                    doc = rs.getString("Doc.IDDocumento")+": "+ rs.getString("Des.Titulo")+"\n";
                }   
                rs.close();

                busqueda =  "SELECT * "+
                            "FROM descripcion Des, documento Doc "+
                            "WHERE Des.IDDescripcion = Doc.IDDescripcion AND (Des.DescripcionContenido='"+DM.getDescripcion()+"');";
                rs = st.executeQuery(busqueda);
                while(rs.next())
                {                   
                    doc = rs.getString("Doc.IDDocumento")+": "+ rs.getString("Des.Titulo")+"\n";
                }   
                rs.close();
                
            resultado+=doc+"\nConcretamente en gatalogacion\nResultados\n";            
            
            String cat="";

            busqueda =  "SELECT * "+
                        "FROM gatalogacion g,rdescripcioncatalogacion rdc,documento d, descripcion de "+
                        "WHERE g.IDCatalogacion = rdc.IDCatalogacion AND de.IDDescripcion = rdc.IDDescripcion AND de.IDDescripcion = d.IDDescripcion AND(g.Nombre='"+DM.getCatalogacionNombre()+"');";

            rs = st.executeQuery(busqueda);
            while(rs.next())
            {
            cat += rs.getString("d.IDDocumento")+": "+ rs.getString("g.Nombre")+"\n"; 
            }
            rs.close();
            
            
            busqueda =  "SELECT * "+
                        "FROM gatalogacion g,rdescripcioncatalogacion rdc,documento d, descripcion de "+
                        "WHERE g.IDCatalogacion = rdc.IDCatalogacion AND de.IDDescripcion = rdc.IDDescripcion AND de.IDDescripcion = d.IDDescripcion AND(g.URI='"+DM.getCatalogacionURI()+"');";

            rs = st.executeQuery(busqueda);
            while(rs.next())
            {
            cat += rs.getString("d.IDDocumento")+": "+ rs.getString("g.Nombre")+"\n"; 
            }
            rs.close();


            resultado+=cat+"\nConcretamente en ficheros\nResultados\n";   
            
            String col="";

            busqueda =  "SELECT * "+
                        "FROM fichero f, rdescripcionficheros rdf, documento d, descripcion de "+
                        "WHERE f.IDFichero = rdf.IDFichero AND rdf.IDDescripcion = de.IDDescripcion AND d.IDDescripcion = de.IDDescripcion AND (f.Nombre='"+DM.getFicheroNombre()+"');";

            rs = st.executeQuery(busqueda);
            while(rs.next()){
                col += rs.getString("d.IDDocumento")+": "+ rs.getString("f.Nombre")+"\n";
            }
            rs.close();
            
            busqueda =  "SELECT * "+
                        "FROM fichero f, rdescripcionficheros rdf, documento d, descripcion de "+
                        "WHERE f.IDFichero = rdf.IDFichero AND rdf.IDDescripcion = de.IDDescripcion AND d.IDDescripcion = de.IDDescripcion AND (f.URI='"+DM.getFicheroURI()+"');";

            rs = st.executeQuery(busqueda);
            while(rs.next()){
                col += rs.getString("d.IDDocumento")+": "+ rs.getString("f.Nombre")+"\n";
            }
            rs.close();
            
            resultado+=col; 
            
        }catch(Exception e){System.out.printf("Fallo en buscaEnLaBDPorDocumento: "+ e.toString());}
        return resultado;
    }
    
    public static String buscaEnLaBDPorAcontecimiento(AcontecimientoModificar AM)
    {
        String resultado ="Buscando en Acontecimientos\nResultados\n";
        String busqueda  ="";
        ResultSet rs;
        try{
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();

            String ac ="";

            busqueda =  "SELECT * "+
                        "FROM acontecimiento "+
                        "WHERE Nombre='"+AM.getNombre()+"';";   
            rs = st.executeQuery(busqueda);
            if(rs.next())
                    ac += rs.getString("IDAcontecimiento")+": "+ rs.getString("Nombre")+"\n";                    
              

            busqueda =  "SELECT * "+
                        "FROM acontecimiento "+
                        "WHERE FechaComienzo='"+AM.getFIni()+"';";   
            rs = st.executeQuery(busqueda);
            if(rs.next())
                    ac += rs.getString("IDAcontecimiento")+": "+ rs.getString("Nombre")+"\n";                    
             

            busqueda =  "SELECT * "+
                        "FROM acontecimiento "+
                        "WHERE FechaFinalizacion='"+AM.getFFiN()+"';";   
            rs = st.executeQuery(busqueda);
            if(rs.next())
                    ac += rs.getString("IDAcontecimiento")+": "+ rs.getString("Nombre")+"\n";                    
            
            resultado+=ac;

        }catch(Exception e){System.out.printf("Fallo en buscaEnLaBDPorAcontecimiento: "+ e.toString());}
        return resultado;
    }
    
    public static String buscaEnLaBDPorColectivo(ColectivoModificar CM)
    {
        String resultado ="Buscando en Colectivos\n Resultados\n";
        String busqueda  ="";
        ResultSet rs;
        try{
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();

            String col ="";

            busqueda =  "SELECT * "+
                            "FROM colectivo "+
                            "WHERE Nombre='"+CM.getNombre()+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    col += rs.getString("IDColectivo")+": "+ rs.getString("Nombre")+"\n";                  
            
            resultado+=col;

        }catch(Exception e){System.out.printf("Fallo en buscaEnLaBDPorColectivo: "+ e.toString());}
        return resultado;
    }
    
    public static String buscaEnLaBDPorPersonaje(PersonajeMoficar PM)
    {
        String resultado ="Buscando en Personajes\nResultados\n";
        String busqueda  ="";
        ResultSet rs;
        try{
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();

            String pe ="";
                busqueda =  "SELECT * "+
                            "FROM personaje "+
                            "WHERE NombreYApellidos='"+PM.getNombreYApellidos()+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    pe += rs.getString("IDPersonaje")+": "+ rs.getString("NombreYApellidos")+"\n";                 
            
                busqueda =  "SELECT * "+
                            "FROM personaje "+
                            "WHERE FechaNacimiento='"+PM.getFNac()+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    pe += rs.getString("IDPersonaje")+": "+ rs.getString("NombreYApellidos")+"\n";                 
            
                busqueda =  "SELECT * "+
                            "FROM personaje "+
                            "WHERE LugarNacimiento='"+PM.getLNac()+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    pe += rs.getString("IDPersonaje")+": "+ rs.getString("NombreYApellidos")+"\n";                 
            
                    busqueda =  "SELECT * "+
                            "FROM personaje "+
                            "WHERE FechaDefuncion='"+PM.getFDef()+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    pe += rs.getString("IDPersonaje")+": "+ rs.getString("NombreYApellidos")+"\n";                 
            
                busqueda =  "SELECT * "+
                            "FROM personaje "+
                            "WHERE LugarDefuncion='"+PM.getLDef()+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    pe += rs.getString("IDPersonaje")+": "+ rs.getString("NombreYApellidos")+"\n";                 
            
                busqueda =  "SELECT * "+
                            "FROM personaje "+
                            "WHERE Biografia='"+PM.getBiografia()+"';";   
                rs = st.executeQuery(busqueda);
                if(rs.next())
                    pe += rs.getString("IDPersonaje")+": "+ rs.getString("NombreYApellidos")+"\n";                 
            
            resultado+=pe;

        }catch(Exception e){System.out.printf("Fallo en buscaEnLaBDPorPersonaje: "+ e.toString());}
        return resultado;
    }
    
    public static void linkaPersonajeCargo(int padre, ClaseCargo hijo)
    {
        try
        {
            Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost", "root", "");
            conexion.setCatalog(nombreBD);
            Statement st = conexion.createStatement();
            
            String rpersonajecargos = "INSERT INTO `rpersonajecargos` (`IDPersonaje`, `IDCargo`, `FechaComienzo`, `FechaFinal` ) VALUES";
            rpersonajecargos += "("+padre+", '"+hijo.getIdCargo()+"', '"+hijo.gettInicio()+"', '"+hijo.gettFin()+"');";
            st.executeUpdate(rpersonajecargos);
            
            conexion.close();
            st.close();
        }
        catch(Exception e)
        {
            System.out.printf("Fallo en linkaPersonajeCargo: "+e.toString());
        }
    }
    
    /**
     * @return the documento
     */
    public static int getDocumento() {
        return documento;
    }

    /**
     * @param aDocumento the documento to set
     */
    public static void setDocumento(int aDocumento) {
        documento = aDocumento;
    }
}
